package base;

import java.util.List;

public abstract class Problema {
	protected double[] valorMaximo; 
	protected double[] valorMinimo; 
	protected int numeroDimensoes;
	
	/**
	 * @return the valorMaximo
	 */
	public double[] getValorMaximo() {
		return valorMaximo;
	}

	/**
	 * @param valorMaximo the valorMaximo to set
	 */
	public void setValorMaximo(double[] valorMaximo) {
		this.valorMaximo = valorMaximo;
	}

	/**
	 * @return the valorMinimo
	 */
	public double[] getValorMinimo() {
		return valorMinimo;
	}

	/**
	 * @param valorMinimo the valorMinimo to set
	 */
	public void setValorMinimo(double[] valorMinimo) {
		this.valorMinimo = valorMinimo;
	}

	/**
	 * @return the numeroDimensoes
	 */
	public int getNumeroDimensoes() {
		return numeroDimensoes;
	}

	/**
	 * @param numeroDimensoes the numeroDimensoes to set
	 */
	public void setNumeroDimensoes(int numeroDimensoes) {
		this.numeroDimensoes = numeroDimensoes;
	}

	public Problema(int numeroDimensoes, double[] valorMaximo, double[] valorMinimo){
		this.numeroDimensoes = numeroDimensoes;
		this.valorMaximo = valorMaximo;
		this.valorMinimo = valorMinimo;
	}
	
	public abstract void avaliacaoFitness(Particula particula);
	
	public abstract void avaliacaoFitness(List<Particula> particulas);
	
	protected void aplicarRestricoes(Particula Particula){
		double[] pos = Particula.getPosicao();
		for (int i = 0; i < pos.length; i++) {
			if(pos[i] < valorMinimo[i]){
				pos[i] = valorMinimo[i];
			}
			else if(pos[i] > valorMaximo[i]){
				pos[i] = valorMaximo[i];
			}
		}
		
		Particula.setPosicao(pos);
	}
}
